package com.concurrent.water.machine;

import com.concurrent.water.machine.util.SimpleSleep;

import java.util.concurrent.TimeUnit;

/**
 * 单元格执行器，用来简化执行单元格
 */
public class CellRunner {
    /**
     * 给一个单元格系统指定运行时间，并且运行
     * @param cell 单元格
     * @param timeUnit 时间单位
     * @param time 时间值
     * @throws InterruptedException 被打断会抛出该异常
     */
    public static void run(ICell cell, TimeUnit timeUnit, long time) throws InterruptedException {
        new Thread(() -> {
            SimpleSleep.sleep(timeUnit, time);
            cell.stop();
        }).start();

        cell.start();
    }

    /**
     * 给一个单元格系统指定运行时间，并且运行，有任何异常都打印到控制台
     * @param cell 单元格
     * @param timeUnit 时间单位
     * @param time 时间值
     */
    public static void runPrintException(ICell cell, TimeUnit timeUnit, long time) {
        try {
            run(cell, timeUnit, time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
